Skip to content

docs: add roadmap page outlining future plans - #4149

Merged
d-v-b merged 30 commits into
zarr-developers:mainfrom
d-v-b:docs/roadmap
Aug 14, 2026
Merged

docs: add roadmap page outlining future plans#4149
d-v-b merged 30 commits into
zarr-developers:mainfrom
d-v-b:docs/roadmap

Conversation

@d-v-b

@d-v-b d-v-b commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Adds a Roadmap page to the documentation describing the goals for the
next major cycle of work ("v4"), the intended changes per theme, and
the three-stream release model (additive minors, deprecations, one
minimal removals-only major), with an option for a legacy module.

Assisted-by: ClaudeCode:claude-fable-5

Author attestation

  • I am a human, these are my changes, and I have reviewed and understood every change and can explain why each is correct.

d-v-b added 2 commits July 15, 2026 09:56
Adds a Roadmap page to the documentation describing the goals for the
next major cycle of work ("v4"), the intended changes per theme, and
the three-stream release model (additive minors, deprecations, one
minimal removals-only major).

Assisted-by: ClaudeCode:claude-fable-5
@d-v-b

d-v-b commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

cc @ilan-gold @maxrjones, opening this as a draft for visibility. lmk if there's anything more or less we should say here

@ilan-gold

ilan-gold commented Jul 16, 2026

Copy link
Copy Markdown
Contributor
Screenshot 2026-07-16 at 17 06 53

This doesn't lead me where I thought it would, somehow linking to an old page

Comment thread docs/roadmap.md Outdated
Zarr-Python around the stack, so that each level is something you can depend
on, conform to, or replace, without buying every other level:

- **A focused package per level** — `zarr-metadata`, `zarr-store`,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would maybe note the zarrs example here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good point, will add something crediting zarrs with this layout

Comment thread docs/roadmap.md Outdated
Comment on lines +58 to +60
complementary rather than competitive: Zarr-Python aims to be the best
pure-Python Zarr implementation *and* the best wrapper around the
compiled-language implementations, so that users who need native throughput can

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm really conflicted on this, because I think baking fragmentation into the ecosystem is not great, but the flipside is that languages may have different features/advantages. It would be great to have a concrete reason (or list of reasons) as to why we would design around this level of extensibility

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good points, I'd say we want the backend to be an extension point for a few reasons:

  • we always want a traditional python impl. IMO it's our job as the python implementation, and it keeps the ecosystem healthy to have multiple implementations
  • we can't guarantee uniform, complete feature support across all implementations. As long as we allow people to hack on stuff in python, there will be things the python impl does that e.g. a rust impl doesn't support, and that's OK. For now, a compiled backend is effectively an external dep, and we simply can't promise what external deps will do in perpetuity.
  • IMO a full backend is just an refined version of our current model, which requires extenders manage buffer prototypes, data type implementations, codec implementations, and store implementations. Consolidating all of this pluggability on a single surface should make extending Zarr Python easier even for other python backends (like a cupy backend, or a pysparse backend)

Comment thread docs/roadmap.md Outdated

@maxrjones maxrjones left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is awesome! thanks so much for your work on this @d-v-b! 🚀

Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md
Comment on lines +180 to +186
Make Zarr-Python's IO surfaces device-agnostic rather than adding GPU support
as a bolted-on feature: stores and codecs grow APIs for writing into a
caller-provided buffer (`read_into`, `decode_into`), and the `Array` facade
returns array-like objects in the user's chosen Array API namespace. GPU
support falls out once the assumption of CPU destinations is removed, and CPU
paths get faster too, because pre-allocated output buffers eliminate per-chunk
allocation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TomAugspurger it'd be great to get your thoughts on this component in particular.

Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
@maxrjones

Copy link
Copy Markdown
Member

This doesn't lead me where I thought it would, somehow linking to an old page

fyi @d-v-b this can be fixed by removing this redirect:

'roadmap.md': 'https://zarr.readthedocs.io/en/v3.0.8/developers/roadmap.html'

d-v-b and others added 3 commits July 17, 2026 17:26
Co-authored-by: Max Jones <14077947+maxrjones@users.noreply.github.com>
Co-authored-by: Max Jones <14077947+maxrjones@users.noreply.github.com>
Co-authored-by: Max Jones <14077947+maxrjones@users.noreply.github.com>
@codecov

codecov Bot commented Jul 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.12%. Comparing base (f4a239c) to head (a56b9ba).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #4149   +/-   ##
=======================================
  Coverage   94.12%   94.12%           
=======================================
  Files          92       92           
  Lines       12826    12826           
=======================================
  Hits        12072    12072           
  Misses        754      754           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

d-v-b and others added 4 commits July 21, 2026 20:31
Co-authored-by: Max Jones <14077947+maxrjones@users.noreply.github.com>
The mkdocs-redirects plugin was generating a redirect stub for
roadmap.md pointing at the old v3.0.8 docs, which clobbered the new
roadmap page added in this PR. The developers/roadmap.html redirect is
kept so old links to the historical v3 design roadmap still resolve.

Assisted-by: ClaudeCode:claude-fable-5
@d-v-b
d-v-b marked this pull request as ready for review August 10, 2026 19:27
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md Outdated
Comment thread docs/roadmap.md
Comment on lines +154 to +158
Move configuration from "global mutable state read implicitly" to "typed data
passed explicitly": a typed config object replacing the untyped global `donfig`
dict, array-scoped runtime config passed at open time, a registry redesign that
addresses implementations by stable identity and resolves plugin name-conflicts
deliberately, and named profiles replacing global mutators.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW I would like to prototype using a context manager in Zarrista for scope-local configuration.

See developmentseed/zarrista#153. In particular the idea is to borrow from rasterio.Env, which injects settings only for that local scope.

with rasterio.Env(GDAL_CACHEMAX=128000000) as env:
    # All drivers are registered, GDAL's raster block cache
    # size is set to 128 MB.
    # Commence processing...
    ...
    # End of processing.

# At this point, configuration options are set to their
# previous (possible unset) values.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This kind of thing relies on two routines or objects being the same, modulo the configuration. So why not make this explicit? for functions its easy, we declare their configuration in a parameter. for objects we can do something similar, by initializing the object with a configuration, and copying the object with a different configuration as needed, e.g. new_object = StatefulObject.with_config(new_config). IMO this is cleaner because it means runtime internals don't need to know about environment variables. they just inspect local data -- function parameters or the attributes of self -- for configuration info.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This kind of thing relies on two routines or objects being the same, modulo the configuration. So why not make this explicit?

We do currently make this explicit as a parameter into each function. The context manager would be an abstraction to automatically pass down the config into all zarrista calls within that scope.

I'm still not sure whether I like the idea though.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't need to know about environment variables.

Oh but to be clear, I didn't have in mind environment variables. Despite the name of rasterio.Env, I don't think it's setting global environment variables, because that wouldn't be scope-local.

I had in mind a context manager that would hold config as a Python object, and that local config could be queried. But I don't think Zarrista should touch shell environment variables at all

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that local config could be queried.

this is a pattern I don't really like. if an object like a function or class instance depends on some other data, then that should be formalized as part of the function signature or class structure. zarr-python today has a lot of places where code reaches for a free-floating config object, when IMO the simpler solution is to add parameters to functions / classes.

d-v-b and others added 6 commits August 11, 2026 08:05
Co-authored-by: Kyle Barron <kylebarron2@gmail.com>
Co-authored-by: Kyle Barron <kylebarron2@gmail.com>
Co-authored-by: Kyle Barron <kylebarron2@gmail.com>
Co-authored-by: Kyle Barron <kylebarron2@gmail.com>
Co-authored-by: Kyle Barron <kylebarron2@gmail.com>
@d-v-b

d-v-b commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

I gave the text a sweep, folks should have another look.

@d-v-b

d-v-b commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

@zarr-developers/python-core-devs please have a look!

@d-v-b

d-v-b commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

I'd like to get this merged soon, so I will self-merge today unless anyone raises objections to specific content here, in which case we can refine things and then merge soon. Otherwise I recommend we continue iterating on the roadmap in follow up PRs.

@d-v-b d-v-b mentioned this pull request Aug 12, 2026
14 tasks

@maxrjones maxrjones left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with everything in this roadmap. I also support merging this since there's been a long window for comments, and folks can still open PRs against the roadmap.

Comment thread docs/roadmap.md Outdated
Comment on lines +30 to +34
The 3.x redesign was carried out under hard backwards-compatibility
constraints, and it inherited many structural patterns from the 2.x
implementation it replaced. The library has never had a release cycle whose
primary goal was the *shape* of the internals. The next body of work — which we
call **"v4"** — is that overdue investment.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The 3.x redesign was carried out under hard backwards-compatibility
constraints, and it inherited many structural patterns from the 2.x
implementation it replaced. The library has never had a release cycle whose
primary goal was the *shape* of the internals. The next body of work — which we
call **"v4"** — is that overdue investment.
The 3.x redesign was carried out under hard backwards-compatibility
constraints, and it inherited many structural patterns from the 2.x
implementation it replaced. These structural patterns have made it
challenging to evolve the API for usability (e.g., many argument are
counter-intuitive and lead to user error) and provide excellent performance
across backends (e.g., local and hybrid systems suffer from
Python overhead with our current design). The goal of **v4** is
to provide a highly usable library that delivers first-class performance
across all backends. We recognize that accomplishing these goals is
only possible via improvements to Zarr Python's internals, and consider
the investment in the Zarr Python internals to be a crucial part of
the **v4*** effort.

I'd like this section to be explicitly motivated for reasons beyond just cleaning up the shape of the internals.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this suggestion was based off an earlier version of the PR; I didn't realize it'd still be included in my review. It probably isn't still necessary, but I'll leave it.

Comment thread docs/roadmap.md
need read-only array access; other tools need everything. We think of this as a
"Zarr stack", from most abstract to most concrete:

1. **Conventions** — application and/or domain-specific schemas built on top of Zarr (OME-NGFF,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer keeping it as just "conventions" since specification may confuse folks who think of the core zarr spec

@d-v-b
d-v-b merged commit 7431699 into zarr-developers:main Aug 14, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants